// 导出一个配置好的axios，提供给main.js使用
import axios from 'axios'
import auth from '@/utils/auth'
import router from '@/router'
import JsonBigint from 'json-bigint'

// 配置基准地址
axios.defaults.baseURL = 'http://ttapi.research.itcast.cn/mp/v1_0/'

// 请求体token的配置
// axios.defaults.headers.Authorization = `Bearer ${auth.getUser().token}`  // (演示代码，加上请求拦截器后需要删除)

// 关于js的最大安全数值的处理(通过第三方包提供的转换)
// 转换数据的响应格式
axios.defaults.transformResponse = [data => {
    // 进行格式转换，必须将转换后的值，return出去
    // 但是，data有可能不是json格式(极端情况),所以 return JsonBigint.parse(data) 可能会报错，所以得使用 try{}catch(e){}
    try {
        // 转换正常
        return JsonBigint.parse(data)
    } catch (e) {
        // 转换异常，还得使用原始数据
        return data
    }
}]


// 配置请求拦截器（可参考官方代码）
axios.interceptors.request.use(config => {
    // 获取本地的token，如果有token，追加即可
    const user = auth.getUser()
    if (user.token) config.headers.Authorization = `Bearer ${user.token}`
    return config
}, error => {
    return Promise.reject(error)
})

// 配置响应拦截器
axios.interceptors.response.use(res => {
    return res
}, err => {
    // token失效，后台会报错
    // err.response 是响应报文对象
    // err.response.status 是响应报错时候的状态码
    if (err.response && err.response.status === 401) {
        router.push('/login')
    }
    return Promise.reject(err)
})


// 导出axios
export default axios